package leet541reversestring2

// 思路
// 以2k为步长遍历字符串，即 start = i ; end = i+2k-1
// 如果end > len(s) 则 end = len(s)-1
// 如果end - start + 1 < k 则直接反转
// 如果end - start + 1 >= k 则反转前k个字符，后k个字符不反转
// 反转字符串切片的功能函数
func reverseByteSlice(s []byte) string {
	// 将这个字符切片反转
	for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
		s[i], s[j] = s[j], s[i]
	}
	return string(s)
}

// 反转字符串的函数
func ReverseStr(s string, k int) string {
	// 将字符串转换为字符切片
	bs := []byte(s)
	// 遍历字符串
	for i := 0; i < len(bs); i += 2 * k {
		// 计算end
		end := i + 2*k - 1
		if end > len(bs)-1 {
			end = len(bs) - 1
		}
		if end-i+1 < k {
			reverseByteSlice(bs[i : end+1])
		} else {
			reverseByteSlice(bs[i : i+k])
		}
	}
	return string(bs)
}
